{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Final Thoughts\n",
    "\n",
    "This brings us to the conlusion of the fundamentals of deep learning. This chapter is dedicated towards summarising what we have done and what the future challenges are at the time of writing.\n",
    "\n",
    "There are 3 fundamental layers in Deep Learning.\n",
    "1. Dense Layers\n",
    "2. Convolutional Layers\n",
    "3. Recurrent Neural Nets (Rather LSTMs)\n",
    "\n",
    "An area that we have not covered in this course was combining all 3 different types. One such example would be caption generation where an image is 'read in' via CNN and this is put in through a LSTM to generate the relevant text. Another similar application is visual question answering where you have an image and you may ask questions about the image (eg. Is Donald Trump sitting next to Vladimir Putin?). In this case the inputs are an image (processed via a CNN) and the question processed via word embeddings and a LSTM. The main take away is that you should start thinking of Deep Learning problems as putting together Lego blocks, choosing the correct layer for the relevant input.\n",
    "![Visual Question Answering](https://camo.githubusercontent.com/f52d44199710c8f3939fb182a339d1d6a0b09a3f/687474703a2f2f692e696d6775722e636f6d2f327a4a30396d512e706e67)\n",
    "*Visual Question Answering [demo](https://github.com/anantzoid/VQA-Keras-Visual-Question-Answering)*\n",
    "\n",
    "Some of the DL methods that are variants of the above networks and are worth mentioning but are beyond the scope of fundamentals are:\n",
    "- [Attention Neural Nets](https://arxiv.org/abs/1409.0473):\n",
    "\n",
    "These are the current choice of NN when it comes to Translation. It allows the network to pay attention to which part of the text is being translated, while it simultaneously translates the text. Previously the whole sentence was read in before translation started.\n",
    "- [Fast R-CNN](https://arxiv.org/abs/1504.08083)\n",
    "\n",
    "Region based CNNs. These allow you to segment relevant objects from images/ videos and can be quite useful for tracking/ general creepiness.\n",
    "- [WaveNet](https://deepmind.com/blog/wavenet-generative-model-raw-audio/)\n",
    "\n",
    "Recently released by Google allows you to synthesise text to speech. The algorithm has been gettting faster and more human like in speech synthesis.\n",
    "- [Cycle GAN](https://github.com/junyanz/CycleGAN)\n",
    "\n",
    "The most famous example was of converting a horse to an image of a Zebra and vice versa (https://www.youtube.com/watch?v=9reHvktowLY). GANs will have quite alot of artistic applications in the future.\n",
    "\n",
    "Even if you do not understand the mathematics behind these algorithms most authors release the code. Then it is simply a matter of using it as you would any other software module.\n",
    "\n",
    "## Exciting Future Prospects\n",
    "Reinforcement Learning is perhaps by far the most interesting area in DL. We have taught robots how to walk using RL but yet to teach them how to fold clothes. This may be done via a different method of Deep Learning called behavioural cloning where you learn by imitating humans.\n",
    "![](https://flyyufelix.github.io/img/c51_screencast.gif)\n",
    "*Distributional Bellman [Demo](https://flyyufelix.github.io/2017/10/24/distributional-bellman.html)*\n",
    "\n",
    "Considering how new GANs are there is quite a lot of interesting research in this area. Most of it has concentrated around how to train them as they are extremely difficult to train. However, cycle GAN, [pix2pix](https://affinelayer.com/pixsrv/) GANs are extensions of the original paper that came up with very interesting applications.\n",
    "\n",
    "Deep Learning still requires quite a large amount of examples for it to learn. Humans on the other hand only require a few examples to extrapolate from previous experience to understand what a given object is. [One shot learning](https://sorenbouma.github.io/blog/oneshot/) aims to use fewer examples to train Neural Networks.\n",
    "\n",
    "DL remains largely as black box devices. This may be good enough for most applications, however it also makes them susceptible. There were papers written recently on pixel level attacks on NNs which caused the image to be classified incorrectly which can have dangerous implications in robotics (eg. self driving cars). Understanding/ visualising Deep Learning remains an active area of research.\n",
    "![](https://blog.openai.com/content/images/2017/02/adversarial_img_1.png)\n",
    "*From: [Attacking Machine Learning with Adversarial Examples](https://blog.openai.com/adversarial-example-research/)*\n",
    "\n",
    "## Future Direction of DeepSchool.io\n",
    "The next few months will be heavily involved on making a course in Reinforcement Learning. I will also be converting the current content into PyTorch, unless Keras creates a PyTorch backend.\n",
    "\n",
    "\n",
    "## Good Reads\n",
    "1. [Software 2.0 by Andrej Karpathy - Director of AI, tesla](https://medium.com/@karpathy/software-2-0-a64152b37c35)\n",
    "\n",
    "## People to Follow\n",
    "1. Andrew Ng https://twitter.com/AndrewYNg\n",
    "2. Andrej Karpathy https://twitter.com/karpathy\n",
    "2. Francois Chollet (Keras Author) https://twitter.com/fchollet\n",
    "3. Hardmaru https://twitter.com/hardmaru\n",
    "4. Ian Goodfellow https://twitter.com/goodfellow_ian\n",
    "3. Arthur Juliani (RL researcher) https://twitter.com/awjuliani\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  },
  "latex_envs": {
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 0
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
